home *** CD-ROM | disk | FTP | other *** search
/ PC Pro 1997 December / PC Pro December 1997 CD-Rom coverdisc.iso / symantec / dbAnywh / JAVA.BIN / CLASSES.ZIP / sun / tools / tree / SynchronizedStatement.class (.txt) < prev    next >
Encoding:
Java Class File  |  1996-12-14  |  3.9 KB  |  93 lines

  1. package sun.tools.tree;
  2.  
  3. import java.io.PrintStream;
  4. import java.util.Hashtable;
  5. import sun.tools.asm.Assembler;
  6. import sun.tools.asm.CatchData;
  7. import sun.tools.asm.Label;
  8. import sun.tools.asm.TryData;
  9. import sun.tools.java.CompilerError;
  10. import sun.tools.java.Constants;
  11. import sun.tools.java.Environment;
  12. import sun.tools.java.Identifier;
  13. import sun.tools.java.Type;
  14.  
  15. public class SynchronizedStatement extends Statement {
  16.    Expression expr;
  17.    Statement body;
  18.  
  19.    public SynchronizedStatement(int var1, Expression var2, Statement var3) {
  20.       super(126, var1);
  21.       this.expr = var2;
  22.       this.body = var3;
  23.    }
  24.  
  25.    long check(Environment var1, Context var2, long var3, Hashtable var5) {
  26.       CheckContext var6 = new CheckContext(var2, this);
  27.       var3 = ((Statement)this).reach(var1, var3);
  28.       var3 = this.expr.checkValue(var1, var6, var3, var5);
  29.       this.expr = ((Node)this).convert(var1, var6, Type.tClass(Constants.idJavaLangObject), this.expr);
  30.       var3 = this.body.check(var1, var6, var3, var5);
  31.       return var2.removeAdditionalVars(var3 & var6.vsBreak);
  32.    }
  33.  
  34.    public Statement inline(Environment var1, Context var2) {
  35.       if (this.body != null) {
  36.          this.body = this.body.inline(var1, var2);
  37.       }
  38.  
  39.       if (this.body == null) {
  40.          return (new ExpressionStatement(super.where, this.expr)).inline(var1, var2);
  41.       } else {
  42.          this.expr = this.expr.inlineValue(var1, var2);
  43.          return this;
  44.       }
  45.    }
  46.  
  47.    public Statement copyInline(Context var1, boolean var2) {
  48.       throw new CompilerError("copyInline");
  49.    }
  50.  
  51.    public void code(Environment var1, Context var2, Assembler var3) {
  52.       this.expr.codeValue(var1, var2, var3);
  53.       var2 = new Context(var2, (Node)null);
  54.       LocalField var4 = new LocalField(super.where, var2.field.getClassDefinition(), 0, Type.tObject, (Identifier)null);
  55.       LocalField var5 = new LocalField(super.where, var2.field.getClassDefinition(), 0, Type.tInt, (Identifier)null);
  56.       Integer var6 = new Integer(var2.declare(var1, var4));
  57.       Integer var7 = new Integer(var2.declare(var1, var5));
  58.       Label var8 = new Label();
  59.       TryData var9 = new TryData();
  60.       var9.add((Object)null);
  61.       var3.add(super.where, 58, var6);
  62.       var3.add(super.where, 25, var6);
  63.       var3.add(super.where, 194);
  64.       CodeContext var10 = new CodeContext(var2, this);
  65.       var3.add(super.where, -3, var9);
  66.       this.body.code(var1, var10, var3);
  67.       var3.add(var10.breakLabel);
  68.       var3.add(var9.getEndLabel());
  69.       var3.add(super.where, 25, var6);
  70.       var3.add(super.where, 195);
  71.       var3.add(super.where, 167, var8);
  72.       CatchData var11 = var9.getCatch(0);
  73.       var3.add(var11.getLabel());
  74.       var3.add(super.where, 25, var6);
  75.       var3.add(super.where, 195);
  76.       var3.add(super.where, 191);
  77.       var3.add(var10.contLabel);
  78.       var3.add(super.where, 58, var7);
  79.       var3.add(super.where, 25, var6);
  80.       var3.add(super.where, 195);
  81.       var3.add(super.where, 169, var7);
  82.       var3.add(var8);
  83.    }
  84.  
  85.    public void print(PrintStream var1, int var2) {
  86.       super.print(var1, var2);
  87.       var1.print("synchronized ");
  88.       this.expr.print(var1);
  89.       var1.print(" ");
  90.       this.body.print(var1, var2);
  91.    }
  92. }
  93.